<?php

namespace App\Controllers;

use Framework\Database;
use Framework\Validation;
use Framework\Session;
// 编辑职位操作的授权保护功能
class UserController {

    protected $db;

    public function __construct() {
        $config = require basePath('config/db.php');
        $this->db = new Database($config);
    }

    /**
     * 显示登录页面
     * 加载登录视图
     */
    public function login() {
        // 调用 loadView 函数来加载登录视图
        loadView('users/login');
    }


    /**
     * 显示注册页面
     *
     * @return void
     */
    public function create() {
        // 调用 loadView函数来加载创建用户的页面
        loadView('users/create');
    }

    public function store() {
        // POST 请求获取用户数据
        $name = $_POST['name'];
        $email = $_POST['email'];
        $city = $_POST['city'];
        $province = $_POST['province'];
        $password = $_POST['password'];
        $passwordConfirmation = $_POST['password_confirmation'];


        // 初始化一个数组来存放可能的错误消息
        $errors = [];

        // 验证电子邮件是否有效
        if (!Validation::email($email)) {
            $errors['email'] = '请输入一个合法的电子邮箱地址!';
        }

        // 验证名字是否在2到50字符之间
        if (!Validation::string($name, 2, 50)) {
            $errors['name'] = '名字长度为2到50!';
        }

        if (!Validation::string($password, 6, 50)) {
            $errors['password'] = '密码长度为6到50!';
        }

        if (!Validation::match($password, $passwordConfirmation)) {
            $errors['password_confirmation'] = '两次的输入密码不一致';
        }



        if (!empty($errors)) {

            // 如果存在错误，重新加载注册页面显示错误信息
            loadView('users/create', [
                'errors'=>$errors,
                'user'=>[
                    'name'=>$name,
                    'email'=>$email,
                    'city'=>$city,
                    'province'=>$province
                ]
            ]);

            // 终止进一步的执行
            exit;
        }
        else{

            // 检查电子邮箱是否存在
            $params = [
                'email' => $email
            ];

            // 执行查询，查看是否有相同的电子邮件已存在在数据库中
            $user = $this->db->query('SELECT * FROM users WHERE email = :email', $params)->fetch();

            // 如果查询到用户
            if ($user) {
                // 添加错误信息
                $errors['email'] = '该邮箱已注册';

                // 重新加载注册页面
                loadView('users/create', [
                    'errors' => $errors
                ]);

                // 终止进一步执行
                exit;
            }

            // 创建用户账户
            $params = [
                'name'=>$name,
                'email'=>$email,
                'city'=>$city,
                'province'=>$province,
                'password'=>password_hash($password, PASSWORD_DEFAULT) // 对密码进行hash处理
            ];
//            inspectAndDie($params);

            // 执行SQL插入操作
            $this->db->query('INSERT INTO users (name, email, city, province, password) VALUES (:name, :email, :city,
                                                                  :province, :password)', $params);
            // Get new UserId
            $userId = $this->db->conn->lastInsertId();

            Session::set('user', [
                'id'=>$userId,
                'name'=>$name,
                'email'=>$email,
                'city'=>$city,
                'province'=>$province,
            ]);


            // 创建用户成功后重定向到首页
            redirect('/');
        }

    }


    public function logout() {
        // 调用 Session类 的clearAll方法清空所有的会话数据
        Session::clearAll();

        // 获取会话 cookie 的参数
        $params = session_get_cookie_params();

        // 删除会话 cookies,设置过期时间为当前时间的之后一天
        setcookie('PHPSESSID', '', time() - 86400, $params['path'], $params['domain']);

        // 重定向到首页
        redirect('/');
    }


    public function authenticate() {
        // 从POST 数据中获取电子邮箱和密码
        $email = $_POST['email'];
        $password = $_POST['password'];

        // 初始化错误数组
        $errors = [];

        // 验证电子邮件是否有效
        if (!Validation::email($email)) {
            $errors['email'] = '请输入一个合法的电子邮箱地址!';
        }


        if (!Validation::string($password, 6, 50)) {
            $errors['password'] = '密码至少为6位!';
        }

        if (!empty($errors)) {
            loadView('users/login', [
                'errors'=>$errors
            ]);
            exit;
        }

        // 准备查询参数查找电子邮件
        $params = [
            'email'=>$email
        ];

        // 从数据库查询用户
        $user = $this->db->query('SELECT * FROM users WHERE email = :email', $params)->fetch();

        // 如果未找到
        if (!$user) {
            $errors['email'] = '用户不存在或密码错误';
            loadView('users/login', [
                'errors'=>$errors
            ]);
            exit;
        }

        // 验证密码是否正确
        if (!password_verify($password, $user->password)) {
            $errors['email'] = '用户不存在或密码错误';
            loadView('users/login', [
                'errors'=>$errors
            ]);
            exit;
        }

        // 验证通过，设置用户的会话信息
        Session::set('user', [
            'id'=>$user->id,
            'name'=>$user->name,
            'email'=>$user->email,
            'city'=>$user->city,
            'province'=>$user->province
        ]);

        // 登录成功重定向到首页
        redirect('/');

    }


}